/*
 * Licensed to the Tai Ping Jin Ke
 *
 * Copyright (c) 2022 .
 * All rights reserved.
 * 项目名称：呼叫中心-业务逻辑层-任务调度-接口定义
 * 版权说明：本软件属太平金融科技服务(上海)有限公司所有，在未获得太平金融科技服务(上海)有限公司正式授权情况下，任何企业和个人，不能获取、阅读、安装、传播本软件涉及的任何受知识产权保护的内容。
 */
package com.taiping.cc.job.service;

import com.taiping.cc.job.pojo.bo.ServiceConfigBO;
import com.taiping.cc.job.pojo.query.ServiceConfigQuery;
import com.taipingframework.boot.web.response.result.ApiResult;
import com.taipingframework.utility.http.ServiceConfigInfo;
import com.taipingframework.utility.exception.ServiceException;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;

@FeignClient(value = "cc-job-service", path = "/service/http", contextId = "httpServiceContext")
public interface HttpService {
    /**
     * 新增一条网络服务的配置
     */
    // 注意，微服务层没有使用@Controller与@RestController，但@Service在本质上是等价于@Controller注解的，
    // 因此对外返回json报文需要搭配@ResponseBody注解，否则后端正常返回外部仍会接收到404异常信息
    @ResponseBody
    @PostMapping(value = "/saveHttpServiceConfig", consumes = {MediaType.APPLICATION_JSON_VALUE})
    ApiResult<Integer> saveHttpServiceConfig(@RequestBody ServiceConfigBO serviceConfigBO) throws ServiceException;

    /**
     * 修改一条网络服务的配置
     */
    // 注意，微服务层没有使用@Controller与@RestController，但@Service在本质上是等价于@Controller注解的，
    // 因此对外返回json报文需要搭配@ResponseBody注解，否则后端正常返回外部仍会接收到404异常信息
    @ResponseBody
    @PostMapping(value = "/updateHttpServiceConfig", consumes = {MediaType.APPLICATION_JSON_VALUE})
    ApiResult<Integer> updateHttpServiceConfig(@RequestBody ServiceConfigBO serviceConfigBO) throws ServiceException;

    /**
     * 删除一条网络服务的配置；逻辑删除，查询操作应该将在逻辑上已经删除的数据给过滤掉
     */
    // 注意，微服务层没有使用@Controller与@RestController，但@Service在本质上是等价于@Controller注解的，
    // 因此对外返回json报文需要搭配@ResponseBody注解，否则后端正常返回外部仍会接收到404异常信息
    @ResponseBody
    @PostMapping(value = "/deleteHttpServiceConfig", consumes = {MediaType.APPLICATION_JSON_VALUE})
    ApiResult<Integer> deleteHttpServiceConfig(@RequestBody ServiceConfigBO serviceConfigBO) throws ServiceException;

    /**
     * 查询一条网络服务的配置
     */
    // 注意，微服务层没有使用@Controller与@RestController，但@Service在本质上是等价于@Controller注解的，
    // 因此对外返回json报文需要搭配@ResponseBody注解，否则后端正常返回外部仍会接收到404异常信息
    @ResponseBody
    @PostMapping(value = "/queryHttpServiceConfig")
    ApiResult<ServiceConfigInfo> queryHttpServiceConfig(@RequestBody ServiceConfigQuery serviceConfigQuery) throws ServiceException;

}
